package com.happyfamily.springboot.crowdsourcingplatform.dao.guo;

import com.happyfamily.springboot.crowdsourcingplatform.model.*;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.session.RowBounds;



import java.util.List;

@Mapper
public interface FrontNeedDao
{


    List<Need> getNeedList(RowBounds rowBounds, @Param("nuseraccount") String nuseraccount, @Param("ntitle") String ntitle, String startDate, String endDate);

	int  getNeedListCount(@Param("nuseraccount") String nuseraccount, @Param("ntitle") String ntitle, String startDate, String endDate);

    List<Work> getWorkList(RowBounds rowBounds,@Param("consumeraccount") String consumeraccount,@Param("wtitle") String wtitle, String startDate, String endDate);

	int  getWorkListCount(@Param("consumeraccount") String consumeraccount,@Param("wtitle") String wtitle, String startDate, String endDate);

	/**
	 * 根据作品id获取作品
	 * @param wid 作品id
	 * @return
	 */
	@Select("SELECT * FROM  work WHERE wid=#{wid}")
	Work getWork(String wid);

	/**
	 * 根据需求id获取投标表信息
	 * @param needid 需求id
	 * @return
	 */
	@Select("SELECT * FROM tender WHERE needid=#{needid}")
	List<Tender> getTenderList(Long needid);

	/**
	 * 根据账号id获取账号信息
	 * @param uid 账号id
	 * @return
	 */
	@Select("SELECT * FROM sys_user  WHERE uid=#{uid}")
	SysUser getUserList(Long uid);


	List<StationFlow> getMoneyList(RowBounds rowBounds,String sendaccount,String startDate);

	int  moneyCount(String sendaccount,String startDate);


	/**
	 * 根据账号获取user对象
	 * @param uaccount 账号
	 * @return
	 */
	@Select("SELECT * FROM sys_user  WHERE uaccount=#{uaccount}")
	SysUser getUser(String uaccount);

	/**
	 * 根据账号更改金额
	 * @param umoney 用户金额
	 * @param uaccount 用户账号
	 * @return
	 */
	@Update(" UPDATE sys_user SET umoney=#{umoney} WHERE uaccount=#{uaccount}")
	int changeMoney(String umoney,String uaccount);

	/**
	 * 添加交易数据
	 * @param stype 交易类型
	 * @param stotalmoney 交易金额
	 * @param stime 交易时间
	 * @param receiveaccount 接收者
	 * @param sendaccount 发送者
	 * @return
	 */
	@Insert("INSERT INTO station_flow (stype,stotalmoney,stime,receiveaccount,sendaccount,sgetmoney) VALUES (#{stype},#{stotalmoney},#{stime},#{receiveaccount},#{sendaccount},#{sgetmoney})")
	int addMoney(String stype,String stotalmoney,String stime,String receiveaccount,String sendaccount,String sgetmoney);

	/**
	 * 获取二级服务类型名称
	 * @param sparentid 二级服务类型id
	 * @return
	 */
	@Select("SELECT * FROM server_type WHERE sparentid=#{sparentid}")
	List<ServerType> getServerType(Long sparentid);

	/**
	 * 删除投标表需求id=id 投标表id<>id的数据
	 * @param tid  投标表id
	 * @param needid  需求表id
	 * @return
	 */
	@Delete("DELETE FROM tender  WHERE  tid<>#{tid} AND needid=#{needid}")
	int deleteTender(Long tid,Long needid);

	/**
	 * 添加订单数据
	 * @param needid 需求id
	 * @param pid    参数id
	 * @param orealtime   工期
	 * @param tid       费率id
	 * @return
	 */
	@Insert("INSERT INTO orders (needid,pid,ostarttime,orealtime,tid,ouseraccount) VALUES(#{needid},#{pid},#{ostarttime},#{orealtime},#{tid},#{ouseraccount})")
	int addOrder(Long needid,Integer pid,String ostarttime,String orealtime,Long tid,String ouseraccount);

	/**
	 * 根据投标表id更改确认时间
	 * @param tendtime 确认服务商时间
	 * @param tid   投标表id
	 * @return
	 */
	@Update("UPDATE tender SET tendtime=#{tendtime} WHERE tid=#{tid}")
	int updateTender(String tendtime,Long tid);

	/**
	 * 根据需求id更改需求状态
	 * @param nstate 需求状态
	 * @param nid  需求id
	 * @return
	 */
	@Update("UPDATE need SET nstate=#{nstate} WHERE nid=#{nid}")
	int updateNeed(String nstate,Long nid);

	/**
	 * 根据需求id查询需求内容
	 * @param nid 需求id
	 * @return
	 */
	@Select("SELECT * FROM need WHERE nid=#{nid}")
	Need getNeed(Long nid);

	/**
	 * 根据联盟id获取联盟信息
	 * @param aid 联盟id
	 * @return
	 */
	@Select("SELECT * FROM alliance  WHERE aid=#{aid}")
	Alliance getAlliance(Long aid);

	/**
	 * 根据服务类型id获取服务名称
	 * @param sid 服务类型id
	 * @return
	 */
	@Select("SELECT *FROM server_type WHERE sid=#{sid}")
	ServerType getType(Long sid);

	List<Orders> getOrderList(RowBounds rowBounds, @Param("ouseraccount") String ouseraccount, String startDate, String endDate);

	int  getOrderListCount( @Param("ouseraccount")String ouseraccount, String startDate, String endDate);

	/**
	 * 根据参数id获取参数对象
	 * @param pid 参数表id
	 * @return
	 */
	@Select("SELECT * FROM parameter WHERE pid=#{pid}")
	Parameter getParameterTypeOne(Long pid);

	/**
	 *根据作品id和用户账号获取订单对象
	 * @param workid 作品id
	 * @param ouseraccount 用户账号
	 * @return
	 */
	@Select("SELECT * FROM orders WHERE workid=#{workid} AND ouseraccount=#{ouseraccount}")
    Orders getOrdder(Long workid,String ouseraccount);

	/**
	 *
	 * @param pid 根据作品id和用户账号更改订单状态
	 * @param workid 作品id
	 * @param ouseraccount 用户账号
	 * @return
	 */
	@Update("UPDATE orders SET pid=#{pid} WHERE workid=#{workid} AND ouseraccount=#{ouseraccount}")
	int changeOrderType(Long pid,Long workid,String ouseraccount);

	/**
	 * 根据作品id和用户账号查询订单表，税率表，参数表获取参数对象
	 * @param workid 作品id
	 * @param ouseraccount 用户账号
	 * @return
	 */
	@Select("SELECT p.*FROM orders o,tariff t,parameter p WHERE o.tid=t.tid AND t.pid=p.pid AND o.workid=#{workid} AND o.ouseraccount=#{ouseraccount}")
	 Parameter getParameter(Long workid,String ouseraccount);

	/**
	 * 根据银行账号获取银行对象
	 * @param baccount 银行账号
	 * @return
	 */
	@Select("SELECT * FROM bank_account WHERE baccount=#{baccount}")
	BankAccount getBankAccount(String baccount);

	/**
	 * 根据银行账号更改银行对象金额
	 * @param bmoney 银行存款
	 * @param baccount 银行账号
	 * @return
	 */
	@Update(" UPDATE bank_account SET bmoney=#{bmoney} WHERE baccount=#{baccount}")
	int updateBankAccount(String bmoney,String baccount);

	/**
	 * 根据作品id用户账号更改订单结束时间
	 * @param oendtime 订单结束时间
	 * @param workid  作品id
	 * @param ouseraccount 用户账号
	 * @return
	 */
	@Update("UPDATE orders SET oendtime=#{oendtime} WHERE workid=#{workid} AND ouseraccount=#{ouseraccount}")
	int changeOrderEndTime(String oendtime,Long workid,String ouseraccount);

	/**
	 * 根据需求id和投标结束时间不为空，获取投标对象
	 * @param needid 需求id
	 * @return
	 */
	@Select("SELECT *FROM tender where needid=#{needid} AND tendtime is not null")
	Tender getTender(Long needid);

	/**
	 * 根据订单id更改订单表的订单属性
	 * @param pid 参数id
	 * @param oid 订单id
	 * @return
	 */
	@Update("UPDATE orders SET pid=#{pid} WHERE oid=#{oid}")
	int changeOrderTypeByOid(Long pid,Long oid);

	/**
	 * 根据订单id获取订单对象
	 * @param oid 订单id
	 * @return
	 */
	@Select("SELECT * FROM orders WHERE oid=#{oid}")
	Orders getOrdersByOid(Long oid);

	/**
	 * 根据订单id更改订单结束时间
	 * @param oendtime 订单结束时间
	 * @param oid    订单id
	 * @return
	 */
	@Update("UPDATE orders SET oendtime=#{oendtime} WHERE oid=#{oid}")
	int changeOrderEndTimeByOid(String oendtime,Long oid);

	/**
	 *  根据订单id联税率表，参数表，订单表查参数表对象
	 * @param oid 订单id
	 * @return
	 */
	@Select("SELECT p.*FROM orders o,tariff t,parameter p WHERE o.tid=t.tid AND t.pid=p.pid AND o.oid=#{oid} ")
	Parameter getParameterByOid(Long oid);


	/**
	 *根据联盟id查询联盟关系对象
	 * @param aid 联盟
	 * @return
	 */
	@Select("SELECT * FROM user_alliance_relation WHERE aid=#{aid}")
	List<User_alliance> getUsers(Long aid);

	/**
	 * 给订单流程表插入数据
	 * @param orderid 订单流程id
	 * @param generatetime 订单操作时间
	 * @param generatematter  订单操作事项
	 * @return
	 */
	@Insert("INSERT INTO order_form (orderid,generatetime,generatematter) VALUES(#{orderid},#{generatetime},#{generatematter})")
	int addOrderFrom(Long orderid,String generatetime,String generatematter);

	/**
	 * 根据道角色类型id获取所有类型集合
	 * @param rid 角色类型id
	 * @return
	 */
	@Select("SELECT * FROM sys_user where rid=#{rid}  order by uscore desc")
	List<SysUser> getCounltantUsder(Long rid);

	@Update("UPDATE sys_user SET uscore=#{uscore} WHERE uaccount=#{uaccount}")
	int changeUserScore(String uscore,String uaccount);


	@Select("SELECT *FROM tender where needid=#{needid} AND tendtime is null")
	List<Tender> getTenderListByNeedid(Long needid);
}
